package com.newedu.equipmgr.servlet;

import com.newedu.equipmgr.service.SysUserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author jerry
 * @create 2020-06-01 15:34:17
 * @company 新开普电子股份有限公司
 *
 * servlet的工作：
 * 1. 继承HttpServlet，Java sun 公司，当时设计的时候，只是设计了一套接口，没有提供实现；是Tomcat，jetty这种web 容器提供者实现的。
 * 2. 重写doGet() or doPost()方法
 * 3. 配置对外服务的url地址（urlPattern):
 *    3.1 通过 注解@WebServlet的形式
 *    3.2 通过 web.xml配置文件中配置
 */
@WebServlet(name="LoginServlet", urlPatterns = {"/servlet/login"})
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    /**
     *  servlet 就是一个Java的类，这个接口，sun公司提供接口，其他的第三方实现，tomcat,jetty,websphere
     *  提供web请求处理的功能
     *  接受客户端发送的请求，并且响应客户端的请求信息。
     *
     *  servlet的工作职责：
     *  1. 接受客户端的请求参数 request.getParameter(); 所有的客户端请求信息，都被封装为HttpRequest类的对象
     *  2. 验证参数的合法性
     *  3. 跟业务场景，编写业务逻辑代码
     *  4. 将业务逻辑执行的结果，存储到域对象（三大域对象 request,session,application)
     *    (在servlet存数据，在jsp中取书序，并显示处理）
     *  5. 转发或者重定向到目标页面（jsp or servlet)
     */
    // kaptcha 是一个servlet
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);
        // 获取用户名和密码，验证码
        String userName = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        String tryCode = req.getParameter("tryCode");

        System.out.println("用户名："+userName);
        System.out.println("密码："+pwd);
        System.out.println("验证码："+tryCode);

//        resp.setContentType("text/html;charset=utf-8");
//        PrintWriter writer = resp.getWriter();
//        writer.append("登录成功！").append("<br>");
//        writer.append("用户名:").append(userName).append("<br>");
//        writer.append("密码:").append(pwd).append("<br>");
        //开始验证 参数的合法性
        String googleVerifyCode = req.getSession().getAttribute("googleVerifyCode").toString();
        String contextPath = req.getContextPath();
        System.out.println(googleVerifyCode);
        System.out.println(tryCode);
        if(!tryCode.equals(googleVerifyCode)){
            //输入的验证码不正确，请重新输入!
            req.getSession().setAttribute("msg","输入的验证码不正确，请重新输入!");
            System.out.println("msg" + "输入的验证码不正确，请重新输入!");
            // 转发或者重定向的登陆页面
            resp.sendRedirect(contextPath+"/login.jsp");
            return;
        }
        // 访问数据库
        SysUserService sysUserService = new SysUserService();
        boolean login = sysUserService.login(userName, pwd);
        if(!login){
            // 输入的用户和密码不正确，请重新输入！
            req.getSession().setAttribute("msg"," 输入的用户和密码不正确，请重新输入!");
            // 转发或者重定向的登陆页面
            resp.sendRedirect(contextPath+"/login.jsp");
            return;
        }

        //如何登陆成功以后，会向域对象中添加数据
        req.getSession().setAttribute("loginUser",userName);
        req.getSession().setAttribute("loginUserId",sysUserService.selectOne(userName, pwd).getId());

        // 重定向到欢迎页
        resp.sendRedirect(contextPath+"/dashboard.jsp");
    }
}
